/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tmPHA;

import ants.*;
import java.io.*;
import java.net.Socket; //Comunicación del Socket
import java.util.ArrayList; //Lista de arreglos
import java.util.LinkedList; //Listas ligadas
import java.util.ListIterator; // Iterador de listas
import java.awt.Point; //Insertar puntos
import java.util.HashMap;

/**
 *
 * @author Angel
 */
public class Cliente_HAP {
    /*
     * Introducir variables globales aqui
     */
    //static Point pos_hormiguero;
    static Memory reinfo;
    static Memory rMatriz;
    /* ¿Variables innecesarias?
    static int foodRest;
    static GamePlay world;
    static LinkedList moves;
    static int Global_score=0;
    * 
    */
    
    
    public static void main(String[] args) throws ClassNotFoundException, IOException {

        Cliente_HAP client = new Cliente_HAP(); //Inicializa el cliente

    }
    
    Cliente_HAP() throws  ClassNotFoundException, IOException {
        /*
         * Preparando el Socket
         */
        Socket socket = new Socket("localhost", 5000); //Cambiar "Localhost" por el IP
        InputStream aux = socket.getInputStream();
        ObjectInputStream entradaObjetos = new ObjectInputStream(aux); /*Stream de entrada*/
        OutputStream aux2 = socket.getOutputStream();
        ObjectOutputStream salidaObjetos = new ObjectOutputStream(aux2);/*Stream de salida*/
        
        /*
         * Entrada inicial
         */
        Inicial mapa;
        mapa = (Inicial) entradaObjetos.readObject(); // Posee la información inicial del programa
        System.out.println("Recibi el mapa"); //Impresión 1
        Mapa_HAP Mapa_propio = new Mapa_HAP(mapa.m -2, mapa.n -2);
        Mapa_propio.setHormigero(mapa.getHormiguero());
        
        ArrayList lista = new ArrayList();
        int k = 1;          
        for (int x = 0; x < mapa.getExploradoras(); x++) {
            //System.out.println(" "+0+" "+mapa.m+" "+mapa.n+" "+k++);
            lista.add(new Hormiga(k++, Tipo_hormiga.Exploradora,mapa.getHormiguero().x, mapa.getHormiguero().y,Modo.Search));
        }
        for (int x = 0; x < mapa.getGuerreras(); x++) {
            lista.add(new Hormiga(k++, Tipo_hormiga.Guerrera,mapa.getHormiguero().x, mapa.getHormiguero().y,Modo.Search));
        }
        for (int x = 0; x < mapa.getObreras(); x++) {
            lista.add(new Hormiga(k++, Tipo_hormiga.Obrera,mapa.getHormiguero().x, mapa.getHormiguero().y,Modo.Search));
        }

        reinfo=new Memory(lista,mapa.m,mapa.n);
        rMatriz=new Memory(lista,mapa.m,mapa.n);
        
        /*
         * Ciclo principal
         * 
         */
        
        while (true) {
            FinalView vista;
            vista = (FinalView) entradaObjetos.readObject(); //Recibe la vista de las hormigas
            System.out.println("Recibi el FinalView"); //Impresión 2
            HashMap Conocimientos = vista.returnConocimientos();
            MoveList movimientos = new MoveList();
            ListIterator itr = lista.listIterator();
            Mapa_propio.printMapa();
            System.out.println("Iteraciones");
            while (itr.hasNext()) {
                Hormiga ant = (Hormiga) itr.next();
                Perspective p = (Perspective)vista.returnView().perspectiva.get(ant.id);
                Perspective_k p2=(Perspective_k) vista.returnKnowledge().perspectiva.get(ant.id);
                /*rMatriz.getMemory(ant.id).printEnv();//.printEnv();
                Environment temp;
                temp=new Environment(mapa.m,mapa.n);
                temp=rMatriz.getMemory(ant.id);
                rMatriz.setMemory(ant.id,ant.setR(temp, ant, p, p2));//ant.setR(rMatriz, ant.place, p, p2);
                rMatriz.getMemory(ant.id).printEnv();
                * 
                */
                Llenar_mapa(p,ant,Mapa_propio);
                double[] probabilidades  = new double[9];
                probabilidades = Conteo_por_perspectiva(Mapa_propio, ant);
                int jugada;
                //System.out.println(probabilidades[0]+" "+probabilidades[1]+" "+probabilidades[2]+" "+probabilidades[3]+" "+probabilidades[4]+" "+probabilidades[5]+" "+probabilidades[6]+" "+probabilidades[7]+" "+probabilidades[8]);
                //System.out.println(probabilidades[0]+probabilidades[1]+probabilidades[2]+probabilidades[3]+probabilidades[4]+probabilidades[5]+probabilidades[6]+probabilidades[7]+probabilidades[8]);
                jugada=ant.getMovePro(probabilidades);
                //System.out.println(jugada);
                switch(jugada){
                    case 0:
                        //Dejamos feromona en la casilla actual de acuerdo al modo y el tipo de hormiga
                        if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                        }else if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Reforce){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();//.addFeromona(2, 0.35);//addfCC(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCH();//3, 0.25);//addfCH(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Carry){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();
                        }
                        //Condiciones para cambio de modo de acuerdo a la situacion.
                        //Si hormiga exploradora encuentra comida, cambia de modo buscar comida a reforzar camino
                        if(Mapa_propio.cells[ant.getX()-1][ant.getY()-1].getFood()==true&&ant.getType()==0&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Reforce);
                            //Si hormiga exploradora encuentra un hormiguero, cambia de modo reforzar camino, a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()-1][ant.getY()-1].getType()==2&&ant.getType()==0&&ant.getMod()==Modo.Reforce){
                            ant.setMod(Modo.Search);
                            //Si hormiga obrera encuentra comida, pasa de modo buscar comida a modo cargando comida
                        }else if(Mapa_propio.cells[ant.getX()-1][ant.getY()-1].getFood()==true&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Carry);
                            //Si hormiga obrera encuentra hormiguero, pasa de modo cargando comida a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()-1][ant.getY()-1].getType()==2&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Search);
                        }
                        ant.setX(-1);
                        ant.setY(-1);

                    break;
                    case 1:
                        //Dejamos feromona en la casilla actual de acuerdo al modo y el tipo de hormiga
                        if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                        }else if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Reforce){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();//.addFeromona(2, 0.35);//addfCC(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCH();//3, 0.25);//addfCH(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Carry){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();
                        }
                        //Condiciones para cambio de modo de acuerdo a la situacion.
                        //Si hormiga exploradora encuentra comida, cambia de modo buscar comida a reforzar camino
                        if(Mapa_propio.cells[ant.getX()][ant.getY()-1].getFood()==true&&ant.getType()==0&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Reforce);
                            //Si hormiga exploradora encuentra un hormiguero, cambia de modo reforzar camino, a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()][ant.getY()-1].getType()==2&&ant.getType()==0&&ant.getMod()==Modo.Reforce){
                            ant.setMod(Modo.Search);
                            //Si hormiga obrera encuentra comida, pasa de modo buscar comida a modo cargando comida
                        }else if(Mapa_propio.cells[ant.getX()][ant.getY()-1].getFood()==true&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Carry);
                            //Si hormiga obrera encuentra hormiguero, pasa de modo cargando comida a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()][ant.getY()-1].getType()==2&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Search);
                        }
                        ant.setX(-1);
                        ant.setY(0);
                    break;
                    case 2:
                        //Dejamos feromona en la casilla actual de acuerdo al modo y el tipo de hormiga
                        if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                        }else if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Reforce){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();//.addFeromona(2, 0.35);//addfCC(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCH();//3, 0.25);//addfCH(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Carry){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();
                        }
                        //Condiciones para cambio de modo de acuerdo a la situacion.
                        //Si hormiga exploradora encuentra comida, cambia de modo buscar comida a reforzar camino
                        if(Mapa_propio.cells[ant.getX()+1][ant.getY()-1].getFood()==true&&ant.getType()==0&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Reforce);
                            //Si hormiga exploradora encuentra un hormiguero, cambia de modo reforzar camino, a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()+1][ant.getY()-1].getType()==2&&ant.getType()==0&&ant.getMod()==Modo.Reforce){
                            ant.setMod(Modo.Search);
                            //Si hormiga obrera encuentra comida, pasa de modo buscar comida a modo cargando comida
                        }else if(Mapa_propio.cells[ant.getX()+1][ant.getY()-1].getFood()==true&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Carry);
                            //Si hormiga obrera encuentra hormiguero, pasa de modo cargando comida a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()+1][ant.getY()-1].getType()==2&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Search);
                        }
                        ant.setX(-1);
                        ant.setY(1);
                    break;
                    case 3:
                        //Dejamos feromona en la casilla actual de acuerdo al modo y el tipo de hormiga
                        if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                        }else if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Reforce){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();//.addFeromona(2, 0.35);//addfCC(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCH();//3, 0.25);//addfCH(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Carry){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();
                        }
                        //Condiciones para cambio de modo de acuerdo a la situacion.
                        //Si hormiga exploradora encuentra comida, cambia de modo buscar comida a reforzar camino
                        if(Mapa_propio.cells[ant.getX()-1][ant.getY()].getFood()==true&&ant.getType()==0&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Reforce);
                            //Si hormiga exploradora encuentra un hormiguero, cambia de modo reforzar camino, a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()-1][ant.getY()].getType()==2&&ant.getType()==0&&ant.getMod()==Modo.Reforce){
                            ant.setMod(Modo.Search);
                            //Si hormiga obrera encuentra comida, pasa de modo buscar comida a modo cargando comida
                        }else if(Mapa_propio.cells[ant.getX()-1][ant.getY()].getFood()==true&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Carry);
                            //Si hormiga obrera encuentra hormiguero, pasa de modo cargando comida a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()-1][ant.getY()].getType()==2&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Search);
                        }
                        ant.setX(0);
                        ant.setY(-1);
                    break;
                    case 4:
                        //Dejamos feromona en la casilla actual de acuerdo al modo y el tipo de hormiga
                        if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                        }else if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Reforce){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();//.addFeromona(2, 0.35);//addfCC(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCH();//3, 0.25);//addfCH(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Carry){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();
                        }
                        //Condiciones para cambio de modo de acuerdo a la situacion.
                        //Si hormiga exploradora encuentra comida, cambia de modo buscar comida a reforzar camino
                        if(Mapa_propio.cells[ant.getX()][ant.getY()].getFood()==true&&ant.getType()==0&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Reforce);
                            //Si hormiga exploradora encuentra un hormiguero, cambia de modo reforzar camino, a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()][ant.getY()].getType()==2&&ant.getType()==0&&ant.getMod()==Modo.Reforce){
                            ant.setMod(Modo.Search);
                            //Si hormiga obrera encuentra comida, pasa de modo buscar comida a modo cargando comida
                        }else if(Mapa_propio.cells[ant.getX()][ant.getY()].getFood()==true&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Carry);
                            //Si hormiga obrera encuentra hormiguero, pasa de modo cargando comida a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()][ant.getY()].getType()==2&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Search);
                        }
                        ant.setX(0);
                        ant.setY(0);
                    break;
                    case 5:
                        //Dejamos feromona en la casilla actual de acuerdo al modo y el tipo de hormiga
                        if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                        }else if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Reforce){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();//.addFeromona(2, 0.35);//addfCC(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCH();//3, 0.25);//addfCH(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Carry){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();
                        }
                        //Condiciones para cambio de modo de acuerdo a la situacion.
                        //Si hormiga exploradora encuentra comida, cambia de modo buscar comida a reforzar camino
                        if(Mapa_propio.cells[ant.getX()+1][ant.getY()].getFood()==true&&ant.getType()==0&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Reforce);
                            //Si hormiga exploradora encuentra un hormiguero, cambia de modo reforzar camino, a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()+1][ant.getY()].getType()==2&&ant.getType()==0&&ant.getMod()==Modo.Reforce){
                            ant.setMod(Modo.Search);
                            //Si hormiga obrera encuentra comida, pasa de modo buscar comida a modo cargando comida
                        }else if(Mapa_propio.cells[ant.getX()+1][ant.getY()].getFood()==true&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Carry);
                            //Si hormiga obrera encuentra hormiguero, pasa de modo cargando comida a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()+1][ant.getY()].getType()==2&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Search);
                        }
                        ant.setX(0);
                        ant.setY(1);
                    break;
                    case 6:
                        //Dejamos feromona en la casilla actual de acuerdo al modo y el tipo de hormiga
                        if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                        }else if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Reforce){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();//.addFeromona(2, 0.35);//addfCC(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCH();//3, 0.25);//addfCH(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Carry){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();
                        }
                        //Condiciones para cambio de modo de acuerdo a la situacion.
                        //Si hormiga exploradora encuentra comida, cambia de modo buscar comida a reforzar camino
                        if(Mapa_propio.cells[ant.getX()-1][ant.getY()+1].getFood()==true&&ant.getType()==0&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Reforce);
                            //Si hormiga exploradora encuentra un hormiguero, cambia de modo reforzar camino, a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()-1][ant.getY()+1].getType()==2&&ant.getType()==0&&ant.getMod()==Modo.Reforce){
                            ant.setMod(Modo.Search);
                            //Si hormiga obrera encuentra comida, pasa de modo buscar comida a modo cargando comida
                        }else if(Mapa_propio.cells[ant.getX()-1][ant.getY()+1].getFood()==true&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Carry);
                            //Si hormiga obrera encuentra hormiguero, pasa de modo cargando comida a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()-1][ant.getY()+1].getType()==2&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Search);
                        }
                        ant.setX(1);
                        ant.setY(-1);
                    break;
                    case 7:
                        //Dejamos feromona en la casilla actual de acuerdo al modo y el tipo de hormiga
                        if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                        }else if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Reforce){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();//.addFeromona(2, 0.35);//addfCC(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCH();//3, 0.25);//addfCH(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Carry){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();
                        }
                        //Condiciones para cambio de modo de acuerdo a la situacion.
                        //Si hormiga exploradora encuentra comida, cambia de modo buscar comida a reforzar camino
                        if(Mapa_propio.cells[ant.getX()][ant.getY()+1].getFood()==true&&ant.getType()==0&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Reforce);
                            //Si hormiga exploradora encuentra un hormiguero, cambia de modo reforzar camino, a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()][ant.getY()+1].getType()==2&&ant.getType()==0&&ant.getMod()==Modo.Reforce){
                            ant.setMod(Modo.Search);
                            //Si hormiga obrera encuentra comida, pasa de modo buscar comida a modo cargando comida
                        }else if(Mapa_propio.cells[ant.getX()][ant.getY()+1].getFood()==true&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Carry);
                            //Si hormiga obrera encuentra hormiguero, pasa de modo cargando comida a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()][ant.getY()+1].getType()==2&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Search);
                        }
                        ant.setX(1);
                        ant.setY(0);
                    break;
                    case 8:
                        //Dejamos feromona en la casilla actual de acuerdo al modo y el tipo de hormiga
                        if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                        }else if(ant.tipo==Tipo_hormiga.Exploradora&&ant.mod==Modo.Reforce){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();//.addFeromona(2, 0.35);//addfCC(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Search){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();//.addFeromona(1, 0.3);//addfCE(1);
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCH();//3, 0.25);//addfCH(1);
                        }else if(ant.tipo==Tipo_hormiga.Obrera&&ant.mod==Modo.Carry){
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCC();
                            Mapa_propio.cells[ant.getX()][ant.getY()].addfCE();
                        }
                        //Condiciones para cambio de modo de acuerdo a la situacion.
                        //Si hormiga exploradora encuentra comida, cambia de modo buscar comida a reforzar camino
                        if(Mapa_propio.cells[ant.getX()+1][ant.getY()+1].getFood()==true&&ant.getType()==0&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Reforce);
                            //Si hormiga exploradora encuentra un hormiguero, cambia de modo reforzar camino, a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()+1][ant.getY()+1].getType()==2&&ant.getType()==0&&ant.getMod()==Modo.Reforce){
                            ant.setMod(Modo.Search);
                            //Si hormiga obrera encuentra comida, pasa de modo buscar comida a modo cargando comida
                        }else if(Mapa_propio.cells[ant.getX()+1][ant.getY()+1].getFood()==true&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Carry);
                            //Si hormiga obrera encuentra hormiguero, pasa de modo cargando comida a buscar comida
                        }else if(Mapa_propio.cells[ant.getX()+1][ant.getY()+1].getType()==2&&ant.getType()==2&&ant.getMod()==Modo.Search){
                            ant.setMod(Modo.Search);
                        }
                        ant.setX(1);
                        ant.setY(1);
                    break;
                }
                System.out.println(ant.place.x + " " + ant.place.y + " " +jugada);
                movimientos.agregar(new Move(ant.id, jugada));
            }
            salidaObjetos.writeObject(movimientos);
            System.out.println("Mande los movimientos");//Impresión 3
            HashMap Conocimientos_movidos = new HashMap();
            Conocimientos_movidos = (HashMap)entradaObjetos.readObject();
            
        }
    }
    
    double[] Conteo_por_perspectiva(Mapa_HAP Mapa_propio, Hormiga ant){
        int food = 0, nest=0, obstacle=0, FCE=0,FCC=0,FRC=0,Antz=0,empty=0;
        int difa=0;
        int difb=0;
        double Hpoints=0, Cpoints=0, Opoints=0, FCEpoints=0, Apoints=0, FRCpoints=0, FCCpoints=0, Epoints=0, remPoints=100.0; 
        double[] probabilidades={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
        //Mapa_propio.printMapa();
        for(int i=0; i<3; i++){
            for(int j=0; j<3; j++){
                //Diferencia de coordenadas entre perspectiva y mapa_propio
                if(i==0&&j==0){
                    difa=-1;
                    difb=-1;    
                }else if(i==0&&j==1){
                    difa=0;
                    difb=-1;
                }else if(i==0&&j==2){
                    difa=1;
                    difb=-1;
                }else if(i==1&&j==0){
                    difa=-1;
                    difb=0;
                }else if(i==1&&j==1){
                    difa=0;
                    difb=0;
                }else if(i==1&&j==2){
                    difa=1;
                    difb=0;
                }else if(i==2&&j==0){
                    difa=-1;
                    difb=1;
                }else if(i==2&&j==1){
                    difa=0;
                    difb=1;
                }else if(i==2&&j==2){
                    difa=1;
                    difb=1;
                }
                //Localiza hormigueros (Que tecnicamente debe ser solo 1)
                if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].getType()==2){
                    nest++;
                //Localiza obstaculos    
                }else if((Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].getType()==0)){
                    obstacle++;
                //Localiza comida
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].getFood()==true){
                    food++;
                //Localiza Feromona de Celda Explorada
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].hayFeromonaE()){
                    FCE++;
                    //System.out.println("Feromona 1");
                //Localiza Feromona de Camino Comida   
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].hayFeromonaC()){
                    FCC++;
                    //System.out.println("Feromona 2");
                //Localiza Feromona de Regreso a Casa   
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].hayFeromonaH()){
                    FRC++;
                    //System.out.println("Feromona 3");
                //Localiza Hormigas      
                }else if((Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].getType()==1)){
                    empty++;
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].ants.size()>0){
                    Antz++;
                } 
            }
        }

        //Hormiga exploradora en modo búsqueda
        if(ant.getType()==0&&ant.getMod()==Modo.Search){
            Opoints=0;                          //Opoints
            FRCpoints=0;                        //FRCpoints
            if(food>0){
                Cpoints=remPoints/1.5;  //Cpoints
                remPoints-=Cpoints;
                Cpoints=Cpoints/food;
            }
            if(FCE>0){
                FCEpoints=remPoints/8;   //FCEpoints
                remPoints-=FCEpoints;
                FCEpoints=FCEpoints/FCE;
            }
            if(FCC>0){
                FCCpoints=remPoints/20;   //FCCpoints
                remPoints-=FCCpoints;
            }
            if(empty>0){
                Epoints=remPoints/3;   //Epoints
                remPoints-=Epoints;
                Epoints=Epoints/empty;
            }
            if(nest>0){
                Hpoints=remPoints/50;     //Hpoints
                remPoints-=Hpoints;     
                Hpoints=Hpoints/nest;
            }
            if(Antz>0){
                Apoints=remPoints;                  //Apoints
                Apoints=Apoints/Antz;
            }else if(food>0){
                remPoints=remPoints/food;
                Cpoints+=remPoints;
            }else if(empty>0){
                remPoints=remPoints/empty;
                Epoints+=remPoints;
            }else if(FCE>0){
                remPoints=remPoints/FCE;
                FCEpoints+=remPoints;
            }else if(FCC>0){
                remPoints=remPoints/FCC;
                FCCpoints+=remPoints;
            }else if(FRC>0){
                remPoints=remPoints/FRC;
                FRCpoints+=remPoints;
            }else if(nest>0){
                remPoints=remPoints/nest;
                Hpoints+=remPoints;
            }

            //Division de puntos para la hormiga exploradora en modo Reforzar Camino
        }else if(ant.getType()==0&&ant.getMod()==Modo.Reforce){
            //System.out.println("Repartimos "+remPoints+" puntos para hormiga exploradora en modo Reforzar Camino: ");
            Opoints=0;                          //Opoints
            FRCpoints=0;                        //FRCpoints
            if(nest>0){
                Hpoints=remPoints/1.5;     //Hpoints
                remPoints-=Hpoints;     
                Hpoints=Hpoints/nest;
            }
            if(FCE>0){
                FCEpoints=remPoints/2;   //FCEpoints
                remPoints-=FCEpoints;
                FCEpoints=FCEpoints/FCE;
            }
            if(FCC>0){
                //Thread.sleep(5000);
                FCCpoints=remPoints/50;   //FCCpoints
                remPoints-=FCCpoints;
                FCCpoints=FCCpoints/FCC;
            }
            if(food>0){
                Cpoints=remPoints/20;  //Cpoints
                remPoints-=Cpoints;
                Cpoints=Cpoints/food;
            }
            if(empty>0){
                Epoints=remPoints/8;   //Epoints
                remPoints-=Epoints;
                Epoints=Epoints/empty;
            }
            if(Antz>0){
                Apoints=remPoints;                  //Apoints
                Apoints=Apoints/Antz;
                remPoints=0;
            }else if(nest>0){
                remPoints=remPoints/nest;
                Hpoints+=remPoints;
            }else if(empty>0){
                remPoints=remPoints/empty;
                Epoints+=remPoints;
            }else if(food>0){
                remPoints=remPoints/food;
                Cpoints+=remPoints;
            }else if(FCE>0){
                remPoints=remPoints/FCE;
                FCEpoints+=remPoints;
            }else if(FCC>0){
                //Thread.sleep(5000);
                remPoints=remPoints/FCC;
                FCCpoints+=remPoints;
            }else if(FRC>0){
                remPoints=remPoints/FRC;
                FRCpoints+=remPoints;
            }

            //Division de puntos para la hormiga obrera en modo busqueda comida
        }else if(ant.getType()==2&&ant.getMod()==Modo.Search){
            //System.out.println("Repartimos "+remPoints+"  puntos para hormiga obrera en modo busqueda comida: ");
            Opoints=0;                          //Opoints
            if(food>0){
                Cpoints=remPoints/1.5;  //Cpoints
                remPoints-=Cpoints;
                Cpoints=Cpoints/food;
            }
            if(FCC>0){
                //Thread.sleep(5000);
                FCCpoints=remPoints/2;   //FCCpoints
                remPoints-=FCCpoints;
                FCCpoints=FCCpoints/FCC;
            }
            if(empty>0){
                Epoints=remPoints/3;   //Epoints
                remPoints-=Epoints;
                Epoints=Epoints/empty;
            }
            /*
            if(FRC>0){
                FRCpoints=remPoints/DivFRCModBCO;   //FRCpoints
                remPoints-=FRCpoints;
                FRCpoints=FRCpoints/FRC;
            }*/
            if(FCE>0){
                FCEpoints=remPoints/10;   //FCEpoints
                remPoints-=FCEpoints;
                FCEpoints=FCEpoints/FCE;
            }
            if(nest>0){
                Hpoints=remPoints/50;     //Hpoints
                remPoints-=Hpoints;     
                Hpoints=Hpoints/nest;
            }
            if(Antz>0){
                Apoints=remPoints;                  //Apoints
                Apoints=Apoints/Antz;
            }else if(food>0){
                remPoints=remPoints/food;
                Cpoints+=remPoints;
            }else if(empty>0){
                remPoints=remPoints/empty;
                Epoints+=remPoints;
            }else if(FCE>0){
                remPoints=remPoints/FCE;
                FCEpoints+=remPoints;
            }else if(FCC>0){
                //Thread.sleep(5000);
                remPoints=remPoints/FCC;
                FCCpoints+=remPoints;
            }else if(FRC>0){
                remPoints=remPoints/FRC;
                FRCpoints+=remPoints;
            }else if(nest>0){
                remPoints=remPoints/nest;
                Hpoints+=remPoints;
            }

            //Division de puntos para la hormiga obrera en modo Cargando comida
        }else if(ant.getType()==2&&ant.getMod()==Modo.Carry){
            //System.out.println("Repartimos"+remPoints+" puntos para hormiga obrera en modo Cargando comida: ");
            Opoints=0;                          //Opoints
            if(nest>0){
                Hpoints=remPoints/1.5;     //Hpoints
                remPoints-=Hpoints;     
                Hpoints=Hpoints/nest;
            }
            if(FRC>0){
                FRCpoints=remPoints/2;   //FRCpoints
                remPoints-=FRCpoints;
                FRCpoints=FRCpoints/FRC;
            }
            if(empty>0){
                Epoints=remPoints/10;   //Epoints
                remPoints-=Epoints;
                Epoints=Epoints/empty;
            }
            if(FCC>0){
                //Thread.sleep(5000);
                FCCpoints=remPoints/2;   //FCCpoints
                remPoints-=FCCpoints;
                FCCpoints=FCCpoints/FCC;
            }
            if(food>0){
                Cpoints=remPoints/20;  //Cpoints
                remPoints-=Cpoints;
                Cpoints=Cpoints/food;
            }
            if(FCE>0){
                FCEpoints=remPoints/4;   //FCEpoints
                remPoints-=FCEpoints;
                FCEpoints=FCEpoints/FCE;
            }
            if(Antz>0){
                Apoints=remPoints;                  //Apoints
                Apoints=Apoints/Antz;
            }else if(nest>0){
                remPoints=remPoints/nest;
                Hpoints+=remPoints;
            }else if(empty>0){
                remPoints=remPoints/empty;
                Epoints+=remPoints;
            }else if(food>0){
                remPoints=remPoints/food;
                Cpoints+=remPoints;
            }else if(FCE>0){
                remPoints=remPoints/FCE;
                FCEpoints+=remPoints;
            }else if(FCC>0){
                //Thread.sleep(5000);
                remPoints=remPoints/FCC;
                FCCpoints+=remPoints;
            }else if(FRC>0){
                remPoints=remPoints/FRC;
                FRCpoints+=remPoints;
            }
            //Guerreras que buscan
        }else if(ant.getType()==1&&ant.getMod()==Modo.Search){
            //System.out.println("Repartimos "+remPoints+"  puntos para hormiga obrera en modo busqueda comida: ");
            Opoints=0;                          //Opoints
            if(food>0){
                Cpoints=remPoints/1.5;  //Cpoints
                remPoints-=Cpoints;
                Cpoints=Cpoints/food;
            }
            if(FCC>0){
                //Thread.sleep(5000);
                FCCpoints=remPoints/2;   //FCCpoints
                remPoints-=FCCpoints;
                FCCpoints=FCCpoints/FCC;
            }
            if(empty>0){
                Epoints=remPoints/3;   //Epoints
                remPoints-=Epoints;
                Epoints=Epoints/empty;
            }
            /*
            if(FRC>0){
                FRCpoints=remPoints/DivFRCModBCO;   //FRCpoints
                remPoints-=FRCpoints;
                FRCpoints=FRCpoints/FRC;
            }*/
            if(FCE>0){
                FCEpoints=remPoints/10;   //FCEpoints
                remPoints-=FCEpoints;
                FCEpoints=FCEpoints/FCE;
            }
            if(nest>0){
                Hpoints=remPoints/50;     //Hpoints
                remPoints-=Hpoints;     
                Hpoints=Hpoints/nest;
            }
            if(Antz>0){
                Apoints=remPoints;                  //Apoints
                Apoints=Apoints/Antz;
            }else if(food>0){
                remPoints=remPoints/food;
                Cpoints+=remPoints;
            }else if(empty>0){
                remPoints=remPoints/empty;
                Epoints+=remPoints;
            }else if(FCE>0){
                remPoints=remPoints/FCE;
                FCEpoints+=remPoints;
            }else if(FCC>0){
                //Thread.sleep(5000);
                remPoints=remPoints/FCC;
                FCCpoints+=remPoints;
            }else if(FRC>0){
                remPoints=remPoints/FRC;
                FRCpoints+=remPoints;
            }else if(nest>0){
                remPoints=remPoints/nest;
                Hpoints+=remPoints;
            }
        }
        for(int i=0; i<3; i++){
            for(int j=0; j<3; j++){
                //Diferencia de coordenadas entre perspectiva y mapa_propio
                if(i==0&&j==0){
                    difa=-1;
                    difb=-1;
                }else if(i==0&&j==1){
                    difa=0;
                    difb=-1;
                }else if(i==0&&j==2){
                    difa=1;
                    difb=-1;
                }else if(i==1&&j==0){
                    difa=-1;
                    difb=0;
                }else if(i==1&&j==1){
                    difa=0;
                    difb=0;
                }else if(i==1&&j==2){
                    difa=1;
                    difb=0;
                }else if(i==2&&j==0){
                    difa=-1;
                    difb=1;
                }else if(i==2&&j==1){
                    difa=0;
                    difb=1;
                }else if(i==2&&j==2){
                    difa=1;
                    difb=1;
                }

            //Localiza hormigueros (Que tecnicamente debe ser solo 1)
                if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].getType()==2){
                    if(i==0&&j==0){
                        probabilidades[0]+=Hpoints;
                    }else if(i==0&&j==1){
                        probabilidades[1]+=Hpoints;
                    }else if(i==0&&j==2){
                        probabilidades[2]+=Hpoints;
                    }else if(i==1&&j==0){
                        probabilidades[3]+=Hpoints;
                    }else if(i==1&&j==1){
                        probabilidades[4]+=Hpoints;
                    }else if(i==1&&j==2){
                        probabilidades[5]+=Hpoints;
                    }else if(i==2&&j==0){
                        probabilidades[6]+=Hpoints;
                    }else if(i==2&&j==1){
                        probabilidades[7]+=Hpoints;
                    }else if(i==2&&j==2){
                        probabilidades[8]+=Hpoints;
                    }

                //Localiza obstaculos    
                }else if((Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].getType()==0)){
                    if(i==0&&j==0){
                        probabilidades[0]+=Opoints;
                    }else if(i==0&&j==1){
                        probabilidades[1]+=Opoints;
                    }else if(i==0&&j==2){
                        probabilidades[2]+=Opoints;
                    }else if(i==1&&j==0){
                        probabilidades[3]+=Opoints;
                    }else if(i==1&&j==1){
                        probabilidades[4]+=Opoints;
                    }else if(i==1&&j==2){
                        probabilidades[5]+=Opoints;
                    }else if(i==2&&j==0){
                        probabilidades[6]+=Opoints;
                    }else if(i==2&&j==1){
                        probabilidades[7]+=Opoints;
                    }else if(i==2&&j==2){
                        probabilidades[8]+=Opoints;
                    }
                //Localiza comida
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].getFood()==true){
                    if(i==0&&j==0){
                        probabilidades[0]+=Cpoints;
                    }else if(i==0&&j==1){
                        probabilidades[1]+=Cpoints;
                    }else if(i==0&&j==2){
                        probabilidades[2]+=Cpoints;
                    }else if(i==1&&j==0){
                        probabilidades[3]+=Cpoints;
                    }else if(i==1&&j==1){
                        probabilidades[4]+=Cpoints;
                    }else if(i==1&&j==2){
                        probabilidades[5]+=Cpoints;
                    }else if(i==2&&j==0){
                        probabilidades[6]+=Cpoints;
                    }else if(i==2&&j==1){
                        probabilidades[7]+=Cpoints;
                    }else if(i==2&&j==2){
                        probabilidades[8]+=Cpoints;
                    }
                //Localiza Feromona de Celda Explorada
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].hayFeromonaE()){
                    if(i==0&&j==0){
                        probabilidades[0]+=FCEpoints;
                    }else if(i==0&&j==1){
                        probabilidades[1]+=FCEpoints;
                    }else if(i==0&&j==2){
                        probabilidades[2]+=FCEpoints;
                    }else if(i==1&&j==0){
                        probabilidades[3]+=FCEpoints;
                    }else if(i==1&&j==1){
                        probabilidades[4]+=FCEpoints;
                    }else if(i==1&&j==2){
                        probabilidades[5]+=FCEpoints;
                    }else if(i==2&&j==0){
                        probabilidades[6]+=FCEpoints;
                    }else if(i==2&&j==1){
                        probabilidades[7]+=FCEpoints;
                    }else if(i==2&&j==2){
                        probabilidades[8]+=FCEpoints;
                    }
                //Localiza Feromona de Camino Comida   
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].hayFeromonaC()){
                    if(i==0&&j==0){
                        probabilidades[0]+=FCCpoints;
                    }else if(i==0&&j==1){
                        probabilidades[1]+=FCCpoints;
                    }else if(i==0&&j==2){
                        probabilidades[2]+=FCCpoints;
                    }else if(i==1&&j==0){
                        probabilidades[3]+=FCCpoints;
                    }else if(i==1&&j==1){
                        probabilidades[4]+=FCCpoints;
                    }else if(i==1&&j==2){
                        probabilidades[5]+=FCCpoints;
                    }else if(i==2&&j==0){
                        probabilidades[6]+=FCCpoints;
                    }else if(i==2&&j==1){
                        probabilidades[7]+=FCCpoints;
                    }else if(i==2&&j==2){
                        probabilidades[8]+=FCCpoints;
                    }
                //Localiza Feromona de Regreso a Casa   
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].hayFeromonaH()){
                    if(i==0&&j==0){
                        probabilidades[0]+=FRCpoints;
                    }else if(i==0&&j==1){
                        probabilidades[1]+=FRCpoints;
                    }else if(i==0&&j==2){
                        probabilidades[2]+=FRCpoints;
                    }else if(i==1&&j==0){
                        probabilidades[3]+=FRCpoints;
                    }else if(i==1&&j==1){
                        probabilidades[4]+=FRCpoints;
                    }else if(i==1&&j==2){
                        probabilidades[5]+=FRCpoints;
                    }else if(i==2&&j==0){
                        probabilidades[6]+=FRCpoints;
                    }else if(i==2&&j==1){
                        probabilidades[7]+=FRCpoints;
                    }else if(i==2&&j==2){
                        probabilidades[8]+=FRCpoints;
                    }
                //Localiza casillas vacias      
                }else if((Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].getType()==1)){
                    if(i==0&&j==0){
                        probabilidades[0]+=Epoints;
                    }else if(i==0&&j==1){
                        probabilidades[1]+=Epoints;
                    }else if(i==0&&j==2){
                        probabilidades[2]+=Epoints;
                    }else if(i==1&&j==0){
                        probabilidades[3]+=Epoints;
                    }/*else if(i==1&&j==1){
                        probabilidades[4]+=Epoints;
                    }*/else if(i==1&&j==2){
                        probabilidades[5]+=Epoints;
                    }else if(i==2&&j==0){
                        probabilidades[6]+=Epoints;
                    }else if(i==2&&j==1){
                        probabilidades[7]+=Epoints;
                    }else if(i==2&&j==2){
                        probabilidades[8]+=Epoints;
                    }
                //Loaliza Hormigas
                }else if(Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].ants.size()>0){
                    if(i==0&&j==0){
                        probabilidades[0]+=Apoints;
                    }else if(i==0&&j==1){
                        probabilidades[1]+=Apoints;
                    }else if(i==0&&j==2){
                        probabilidades[2]+=Apoints;
                    }else if(i==1&&j==0){
                        probabilidades[3]+=Apoints;
                    }else if(i==1&&j==1){
                        probabilidades[4]+=Apoints;
                    }else if(i==1&&j==2){
                        probabilidades[5]+=Apoints;
                    }else if(i==2&&j==0){
                        probabilidades[6]+=Apoints;
                    }else if(i==2&&j==1){
                        probabilidades[7]+=Apoints;
                    }else if(i==2&&j==2){
                        probabilidades[8]+=Apoints;
                    }
                }
            //Termina la definicion de diferencias
            }
        }
        return probabilidades;
    }
    
    void Llenar_mapa(Perspective p, Hormiga ant, Mapa_HAP Mapa_propio){
        int difa=0;
        int difb=0;
        for(int i=0; i<3; i++){
            for(int j=0; j<3; j++){
                //Diferencia de coordenadas entre perspectiva y mapa_propio
                if(i==0&&j==0){
                    difa=-1;
                    difb=-1;
                }else if(i==0&&j==1){
                    difa=0;
                    difb=-1;
                }else if(i==0&&j==2){
                    difa=1;
                    difb=-1;
                }else if(i==1&&j==0){
                    difa=-1;
                    difb=0;
                }else if(i==1&&j==1){
                    difa=0;
                    difb=0;
                }else if(i==1&&j==2){
                    difa=1;
                    difb=0;
                }else if(i==2&&j==0){
                    difa=-1;
                    difb=1;
                }else if(i==2&&j==1){
                    difa=0;
                    difb=1;
                }else if(i==2&&j==2){
                    difa=1;
                    difb=1;
                }
                if(p.tiles[i][j].type==Constantes.obstaculo){
                    /*Celda_HAP temp=new Celda_HAP();
                    temp.tipo=p.tiles[i][j].type;
                    Mapa_propio.setCelda(temp, ant.getX()+difb, ant.getY()+difa,p);  */
                    if(ant.getX()+difb<1 || ant.getY()+difa<1)
                    Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].tipo=Constantes.obstaculo;
                }else if(p.tiles[i][j].food==true){
                    Mapa_propio.cells[ant.getX()+difb][ant.getY()+difa].comida=true;
                }
            }
        }
    }
}